
package gui;
import bluetooth.Archivo;
import javax.bluetooth.BluetoothStateException;
import javax.microedition.lcdui.*;
import bluetooth.Peer;
import java.io.IOException;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;
import javax.microedition.midlet.MIDlet;
//import org.netbeans.microedition.lcdui.pda.FileBrowser;


/**
 * Clase que representa la pantalla principal de la aplicación, permite buscar
 * disposivitos bluetooth, seleccionar el dispositivo, buscar sus servicios y
 * conectar con el dispositivo para realizar el envío de datos.
 * @author Albertina Durante, Matías Martínez Blanquier, Flavio Peralta.
 */
public class BluetoothCliente extends MIDlet implements CommandListener {

    private Command cmdBuscar;
    private Command cmdSalir;
    private Command cmdCancelar;
    private Command cmdSeleccionar;
    private Command cmdEnviar;
    private Command cmdBorrar;
    private Command cmdCompartirArchivo;
    private Display display;
    private boolean stringAux;
    private Peer agente;
    private List lista;
    private TextBox txtMensaje;
    //private FileBrowser fileBrowser;
    private Ticker ticker;
    private DiscoveryAlert discoveryAlert;
    
    //private Peer peer;

    /**
     * Constructor que inicializa los componentes de interfaz gráfica.
     */
    public BluetoothCliente()
    {
        display=Display.getDisplay(this);
        cmdBuscar=new Command("Buscar",Command.OK,0);
        cmdSalir=new Command("Salir",Command.EXIT,1);
        cmdCancelar=new Command("Cancelar",Command.CANCEL,2);
        cmdSeleccionar=new Command("Seleccionar",Command.OK,3);
        cmdCompartirArchivo= new Command( "Compartir Archivo", Command.OK,4);
        ticker=new Ticker("BluetoothDiscovery v1.0");
        stringAux=true;
        lista=new List("Dispositivos Bluetooth",List.IMPLICIT);
        lista.addCommand(cmdBuscar);
        lista.addCommand(cmdSalir);
        lista.addCommand(cmdCancelar);
        lista.addCommand(cmdSeleccionar);
        lista.addCommand(cmdCompartirArchivo);
        lista.setCommandListener(this);
        lista.setTicker(ticker);
        try {
            agente= new Peer(this);
        } catch (BluetoothStateException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Método startApp().
     */
    public void startApp() {
        display.setCurrent(lista);
    }

    /**
     * Método pauseApp().
     */
    public void pauseApp() {
    }

    /**
     * Método destroyApp(boolean unconditional).
     * @param unconditional
     */
    public void destroyApp(boolean unconditional) {
    }

    /**
     * Método que se encarga de liberar los recursos del dispositivo y notificar al sistema
     * que la aplicación ha realizado su ejecución de forma normal, sin error.
     */
    public void salirPantalla()
    {
        display=null;
        destroyApp(false);
        notifyDestroyed();
    }

    /**
     * Permite crear un nuevo StringItem.
     */
    public void clearLista()
    {
        if(lista.size()!=0)
            lista.deleteAll();
    }

    public void setDispositivoLista(String dispositivo)
    {
        lista.append(dispositivo, null);
    }

    /**
     * Permite verificar si el StringItem tiene contenido, entendiendo por contenido el listado
     * de dispositivos bluetooth descubiertos por la clase Peer y sus métodos.
     * @return true si no tiene contenido, false si tiene contenido.
     */
    public boolean isStringEmpty()
    {
        return stringAux;
    }

    public void deleteMensaje()
    {
        txtMensaje.setString("");
    }

    public void createTextBox()
    {
        cmdEnviar=new Command("Enviar",Command.OK,0);
        cmdBorrar=new Command("Borrar",Command.OK,4);
        txtMensaje=new TextBox("Archivos Compartidos.","",100,TextField.ANY);
        txtMensaje.addCommand(cmdEnviar);
        txtMensaje.addCommand(cmdCancelar);
        txtMensaje.addCommand(cmdBorrar);
        txtMensaje.setCommandListener(this);
        txtMensaje.setString(agente.darArchivosCompartidos());
        display.setCurrent(txtMensaje);
    }
   /* 
   public FileBrowser createFileBrowser(){
        if (fileBrowser == null) {
            // write pre-init user code here
            fileBrowser = new FileBrowser(Display.getDisplay(this));
            fileBrowser.setTitle("Archivos");
            fileBrowser.setCommandListener(this);
            fileBrowser.addCommand(FileBrowser.SELECT_FILE_COMMAND);
            // write post-init user code here
        }
        return fileBrowser;
    }*/

    public String getMensaje()
    {
        return txtMensaje.getString();
    }

    public void setMensaje(String mensaje)
    {
        txtMensaje.setString(mensaje);
    }

    /**
     * Método redefinido de la interfaz CommandListener que permite especificar la secuencia
     * de acciones que deben responder los comandos principales de la aplicación.
     * @param c
     * @param d
     */
    public void commandAction(Command c, Displayable d) {

        if(c==cmdBuscar)
        {
            try
            {
                //agente=new Peer(this);
                agente.startBusquedaDispositivos();
                discoveryAlert=new DiscoveryAlert("Buscando Dispositivos Bluetooth",agente);
                (new Thread(discoveryAlert)).start();
                display.setCurrent(discoveryAlert);
            }
            catch(Exception e)
            {
                System.out.println(e.getMessage());
            }
        }
        else if(c==cmdSalir)
                salirPantalla();
        else if(c==cmdSeleccionar)
                {
                    createTextBox();
                }
        else if(c == cmdCompartirArchivo)
        {
           /** createFileBrowser();
            try {
                FileConnection filecon= fileBrowser.getSelectedFile();
                Archivo a= new Archivo();
                a.setNombre(filecon.getName());
                a.setRuta(filecon.getPath());
                peer.comnpartirArchivo(a);
            } catch (IOException ex) {
                ex.printStackTrace();
            }*/
            agente.comnpartirArchivo(null);
        }
        else if (c == cmdEnviar) {
            try {
                discoveryAlert = new DiscoveryAlert("Conectando con servidor ", agente);
                agente.startSearchServices(lista.getSelectedIndex());
                (new Thread(discoveryAlert)).start();
                display.setCurrent(discoveryAlert);
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        } else if (c == cmdBorrar) {
            deleteMensaje();
        } else {
            if (d instanceof List && agente != null) {
                agente.cancelar();
                return;
            }

            Display.getDisplay(this).setCurrent(lista);

        }
   
        

    }

}
